﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;

namespace TestSOAPServices
{
    [TestClass]
    public class TestCobro
    {
        WSVehiculos.Vehiculo vehiculo = null;
        WSVehiculos.Vehiculo vehiculo2 = null;
        WSVehiculos.Vehiculo vehiculo3 = null;
        WSCobros.VehiculoTicket cobroNuevo = null;
        WSCobros.Ticket ticket = null;

        [TestMethod]
        public void TestMethod1()
        {

            //Se autentica el empleado
            string usuario = "mneyra";
            // Prueba de obtención de empleado vía HTTP GET
            HttpWebRequest req2 = (HttpWebRequest)WebRequest.Create("http://localhost:17279/Empleados.svc/Usuarios?usuario=" + usuario);
            req2.Method = "GET";
            HttpWebResponse res2 = (HttpWebResponse)req2.GetResponse();
            StreamReader reader2 = new StreamReader(res2.GetResponseStream());
            string empleadoJson2 = reader2.ReadToEnd();
            JavaScriptSerializer js2 = new JavaScriptSerializer();
            Empleado empleadoObtenido = js2.Deserialize<Empleado>(empleadoJson2);
            Assert.AreEqual(1, empleadoObtenido.Codigo);
                
            //formulario clasificacion vehicular
            //Ingresamos la placa
            int placa = 1234;

            //formulario datos del vehiculo
            //Obtener datos del vehiculo del servicio Vehiculos
            WSVehiculos.VehiculosClient wsVehiculos = new WSVehiculos.VehiculosClient();
            vehiculo = wsVehiculos.obtenerVehiculo(placa);
            //Calcular el monto del peaje a cobrar
            vehiculo2 = wsVehiculos.calcularCobroXEje(vehiculo.Eje,vehiculo.Tipo);
            //Calcular el monto del detraccion a cobrar
            vehiculo3 = wsVehiculos.calcularDetraccion(vehiculo.Eje);

            Assert.AreEqual("Mercedes-Benz ", vehiculo.Marca);
            Assert.AreEqual("Actros 817", vehiculo.Modelo);
            Assert.AreEqual("Rojo", vehiculo.Color);
            Assert.AreEqual(2012, vehiculo.Anio);
            Assert.AreEqual(4, vehiculo.Eje);
            Assert.AreEqual("Pesado", vehiculo.Tipo);
            Assert.AreEqual("20211614545", vehiculo.Empresa.RUC);
            Assert.AreEqual("UPC", vehiculo.Empresa.RazonSocial);
            Assert.AreEqual(4, vehiculo2.Precio);
            Assert.AreEqual(16, vehiculo2.Total);
            Assert.AreEqual(1, vehiculo3.Precio2);
            Assert.AreEqual(4, vehiculo3.Total2);         

            ////------------------------------------------*----------------------------------------------
            //Generar ticket
            WSCobros.CobrosClient wsCobros = new WSCobros.CobrosClient();
            ticket = wsCobros.generarTicket(DateTime.Today.Date,empleadoObtenido.Codigo);
            Assert.IsNotNull(ticket);
            Assert.IsTrue(ticket.Numero > 0);

            //Registrar cobro de peaje
            try
            {
                cobroNuevo = wsCobros.registrarCobro(vehiculo.Placa, ticket.Numero, vehiculo2.Total, vehiculo3.Total2, 0);
            }
            catch (Exception e)
            {
                //Assert.AreEqual("El vehiculo no esta afecto a detracciones.", e.Message);
            }
            Assert.AreEqual(1234, cobroNuevo.Vehiculo.Placa);
            //Assert.AreEqual(7, cobroNuevo.Ticket.Numero);
            Assert.AreEqual(16, cobroNuevo.Peaje);
            Assert.AreEqual(4, cobroNuevo.Detraccion);
    
        }
    }
}
